<?php
namespace App\Third;
use App\Third\PKCS7Encoder;
use App\Third\ErrorCode;
use App\Third\Prpcrypt;
/**
 * 对微信小程序用户加密数据的解密示例代码.
 *
 * @copyright Copyright (c) 1998-2014 Tencent Inc.
 */
class WXBizDataCrypt
{
	/**
	 * 检验数据的真实性，并且获取解密后的明文.
	 * @param $encryptedData string 加密的用户数据
	 * @param $iv string 与用户数据一同返回的初始向量
	 * @param $data string 解密后的原文
     *
	 * @return int 成功0，失败返回对应的错误码
	 */
	public function decryptData($appid, $sessionKey, $encryptedData, $iv, &$data )
	{
		if (strlen($sessionKey) != 24) {
			return [ErrorCode::$IllegalAesKey];
		}
		$aesKey=base64_decode($sessionKey);


		if (strlen($iv) != 24) {
			return [ErrorCode::$IllegalIv];
		}
		$aesIV=base64_decode($iv);

		$aesCipher=base64_decode($encryptedData);

		$pc = new Prpcrypt();
		$result = $pc->decrypt($aesKey,$aesCipher,$aesIV);

		if ($result[0] != 0) {
			return [0,$result[0]];
		}

        $dataObj=json_decode( $result[1] );
        if( $dataObj  == NULL )
        {
            return [ErrorCode::$IllegalBuffer];
        }
        if( $dataObj->watermark->appid != $appid )
        {
            return [ErrorCode::$IllegalBuffer];
        }
		$data = $result[1];
		$code = ErrorCode::$OK;
		return [$code, $data];
	}
}